package controllers

import (
	"ExchangeApp/global"
	"ExchangeApp/models"
	"errors"
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"net/http"
	"time"
)

// CreateExchangeRate 创建汇率记录
// @Summary 创建新汇率记录
// @Description 创建一条新的货币兑换汇率记录
// @Tags 汇率
// @Accept json
// @Produce json
// @Param rate body models.ExchangeRate true "汇率信息"
// @Success 200 {object} models.ExchangeRate
// @Failure 400 {object} map[string]string
// @Failure 500 {object} map[string]string
// @Router /exchange-rates [post]
func CreateExchangeRate(ctx *gin.Context) {
	// 声明一个ExchangeRate结构体变量，用于接收请求数据
	var exchangeRate models.ExchangeRate

	// 将请求的JSON数据绑定到结构体，如果绑定失败则返回错误
	if err := ctx.ShouldBindJSON(&exchangeRate); err != nil {
		fmt.Println("错误:", err)
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 设置当前时间为汇率日期
	exchangeRate.Date = time.Now()

	// 将汇率记录保存到数据库
	if err := global.Db.Create(&exchangeRate).Error; err != nil {
		ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	// 返回创建成功的汇率记录
	ctx.JSON(http.StatusOK, exchangeRate)
}

// GetExchangeRates 获取汇率列表
// @Summary 获取所有汇率记录
// @Description 查询数据库中的所有汇率记录列表
// @Tags 汇率
// @Produce json
// @Success 200 {array} models.ExchangeRate
// @Failure 404 {object} map[string]string
// @Failure 500 {object} map[string]string
// @Router /exchange-rates [get]
func GetExchangeRates(ctx *gin.Context) {
	// 声明汇率记录数组
	var exchangeRates []models.ExchangeRate

	// 从数据库查询所有汇率记录
	if err := global.Db.Find(&exchangeRates).Error; err != nil {
		// 处理不同类型的错误
		if errors.Is(err, gorm.ErrRecordNotFound) {
			// 没有找到记录
			ctx.JSON(http.StatusNotFound, gin.H{"error": "未找到汇率记录"})
		} else {
			// 数据库查询错误
			ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		}
		return
	}

	// 返回查询到的汇率记录列表
	ctx.JSON(http.StatusOK, exchangeRates)
}
